iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0

建立好基本的框架及應用程式後
我們要來把框架做得更完善一點啦!

debugging

我們先從建立 debugging 開始
這邊並不是真的寫 debug 功能

而是先用簡單的方式來模擬 debug
在之後我們會再更深入的介紹

step 1 在 rainbow 加入 debugging 訊息

module Rainbow
  class Application
    def call(env)
      # 執行時會產生一個 debug.txt檔,並在檔案中印出 debug
      `echo debug > debug.txt`
      [
        200, 
        {'Content-Type' => 'text/html'},
        ["Hello from Ruby on Rulers!"]
      ]
    end
  end 
end

web小辭典

▶ echo:與 puts 一樣是印出的意思

step 2 刪除 rainbow-0.0.1.gem

step 3 重新安裝套件

> gem build rainbow.gemspec

  Successfully built RubyGem
  Name: rainbow
  Version: 0.0.1
  File: rainbow-0.0.1.gem

> gem install rainbow-0.0.1.gem

step 4 到 quotations 啟用 rackup -p 3001

啟動後就會建立一個debug.txt的檔案

建立函式庫

接下來我們要來做「陣列」
但我們不只要做出來
還要讓使用 Rainbow 框架的應用程式都能用「Array」

step 1 建立 Array.rb 檔

定義一個 class Array
在 Array 中定義實體方法
Array new 出來的實體物件就可以使用
(可參考小辭典中的繼承鏈)

# rainbow/lib/rainbow/array.rb
class Array
  def deeply_empty?
    # empty? 判斷是否為空
    # all? 參數都是true 就會回傳 true 否則回傳 false 或 nil
    # & 轉成 proc 物件
    # 如果是空字串,或者所有物件都為空
    empty? || all?(&:empty?)
  end 
end

web小辭典

▶ ActiveSupport:Rails 中的工具函式庫,像是 Ruby 的擴充工具
常見的 present?、blank?、presence 都是方法之一

▶ 繼承鏈:
Obj 為 classA new 出來的實體物件,會繼承 classA 的所有方法
而 Object 為 classA 的 superclass
所以 classA 會繼承 Object 的所有方法

可以把繼承鏈想像成種族
最上層的 Object 是 classA、Module、Obj 的遠古祖先
這些後輩都會有他留下來的基因(方法)
classA 是其中一種種族,obj 屬於 classA 種族
因此 obj 帶有 classA 的基因(方法)
依此類推

step 2 讓所有應用程式都可以使用陣列方法

把 Array.rb require 到 rainbow.rb 中
到時候 gem 安裝的時候就會一起載入囉

# /rainbow/lib/rainbow.rb

require "rainbow/array"

step 3 刪除 rainbow-0.0.1.gem

step 4 git add .

需要在這邊把檔案放到 git 暫存區是因為
rainbow.gemspec 會叫 git 去找我們的 gem 包含哪些檔案
讓我們來看看 gemspec 檔案

spec.files = Dir.chdir(__dir__) do
  # 把 git 追蹤的所有檔案逐字列出,直到NUL出現,再做後面的方法(split、reject)
  `git ls-files -z`.split("\x0").reject do |f|
     (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
  end
end

step 5 重新安裝套件

> gem build rainbow.gemspec

  Successfully built RubyGem
  Name: rainbow
  Version: 0.0.1
  File: rainbow-0.0.1.gem

> gem install rainbow-0.0.1.gem

step 4 測試 array

# /quotations/array.rb
a = [1, 3]
p a.sum # 4

這樣就成功建立陣列函式庫囉!
我們明天再來建立測試檔吧!


上一篇
Day 05 建立應用程式
下一篇
Day 07 完整框架的基本功能(二)
系列文
從0開始刻 淺談 Rails 的運作魔法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言